package com.distrimas.senta.servicios.seguridad;

import com.distrimas.senta.dominio.contabilidad.nomina.CargoDTO;
import com.distrimas.senta.servicios.comun.Validador;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginControl extends HttpServlet {
    
	private static final String USUARIO_INVALIDO = "El usuario y/o la clave son incorrectos";
	private static final String FALTAN_PARAMETROS = "Por favor ingrese el nombre de usuario y la clave";

    @Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)	throws ServletException, IOException {
        String nombre = req.getParameter("user");
		String clave = req.getParameter("pass");
        if(nombre!=null && clave!=null && Validador.validarVacio(nombre) && Validador.validarVacio(clave)){
            UsuarioDTO usuario = new UsuarioDTO();
            usuario.setNombre(nombre);
            usuario.setContrasena(clave);
            UsuarioManager um = new UsuarioManager();
            try{
                if(um.usuarioValido(usuario)){
                    aprobar(req, resp);
                }
                else{
                    rechazar(req,resp,USUARIO_INVALIDO);
                }
            }catch(Exception e){
				rechazar(req, resp, e);
			}
        }
        else{
            rechazar(req,resp,FALTAN_PARAMETROS);
		}
	}

    @Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		rechazar(req,resp,FALTAN_PARAMETROS);
	}

    private String getPath(String cargo) {
        String path = null;
        int codigoCargo = Integer.parseInt(cargo);
        switch(codigoCargo){

            case 1:
                path = "com/distrimas/senta/presentacion/contabilidad/puc/administrarSubcuenta.jsp";
                break;
            case 2:
                path = "com/distrimas/senta/presentacion/contabilidad/puc/administrarSubcuenta.jsp";
                break;
            case 3:
                path = "com/distrimas/senta/presentacion/contabilidad/puc/administrarSubcuenta.jsp";
                break;
            case 4:
                path = "com/distrimas/senta/presentacion/contabilidad/puc/administrarSubcuenta.jsp";
                break;
        }
        return path;

    }

	private void rechazar(HttpServletRequest req, HttpServletResponse resp, Object respuesta) throws ServletException, IOException{
		req.setAttribute("respuestaSolicitud", respuesta);
		RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
		rd.forward(req, resp);
	}

	private void aprobar(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
		req.setAttribute("validado", new Boolean(true));
        UsuarioManager um = new UsuarioManager();
        UsuarioDTO usuario = um.getUsuario(req.getParameter("user"));
        CargoDTO cargoUs = usuario.getEmpleado().getCargo();
        String cargo = cargoUs.getCodigo();
		RequestDispatcher rd = null;
		if(cargo==null){
			req.setAttribute("respuestaSolicitud", "El usuario no tiene ningún cargo");
			rd = req.getRequestDispatcher("index.jsp");
		}else{
			HttpSession session = req.getSession(true);
			req.setAttribute("validado", true);
			session.setMaxInactiveInterval(60*60*2);// 1 hora de inactividad
			req.setAttribute("usuarioactual", usuario);
			rd = req.getRequestDispatcher(getPath(cargo));
		}
		rd.forward(req, resp);
	}

	public static RespuestaDTO getMensaje(HttpServletRequest req){
        RespuestaDTO result = new RespuestaDTO();
        result.setMensaje(req.getAttribute("respuestaSolicitud"));
		return result;
	}

}
